package com.pxmeta.order.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.pxmeta.order.entity.Order;
import com.pxmeta.order.vo.AlipayCreateOrderVO;
import com.pxmeta.order.vo.CreateOrderVO;
import com.pxmeta.party.entity.Gift;
import com.pxmeta.user.entity.vo.UserRechargeVO;

import java.util.List;

/**
 * <p>
 * 订单表 服务类
 * </p>
 *
 * @author wcl
 * @since 2023-02-11
 */
public interface IOrderService extends IService<Order> {

    /**
     * 创建订单
     * @param userId 用户id
     * @param productId 商品id
     */
    CreateOrderVO createOrder(Long userId, Long productId, String appStoreProductId, Integer type);


    /**
     * 创建订单
     * @param userId 用户id
     * @param productId 商品id
     */
    AlipayCreateOrderVO createOrderByAlipay(Long userId, Long productId);


    /**
     * 创建订单
     * @param userId 用户id
     * @param productId 商品id
     */
    CreateOrderVO createOrder(Long userId, Long productId, String appStoreProductId, String openId);


    /**
     * 创建订单
     * @param userId 用户id
     * @param number 商品id
     */
    CreateOrderVO createOrder(Long userId, Integer number, String openId);

    /**
     * 支付成功处理
     * @param orderNo
     */
    void paySuccess(String orderNo, String transactionId, String receipt,String payType);

    /**
     * 根据订单号查询订单
     * @param orderNo
     * @return
     */
    Order getByOrderNo(String orderNo);


    /**
     * 获取服务订单状态
     * @param userId
     * @param serviceId
     * @return
     */
    Integer getOrderStatus(Long userId, Long serviceId);

    /**
     * 获取用户总充值
     * @param userId
     * @return
     */
    Double getTotalRecharge(Long userId);


    Double getTotalRecharge(String keyword, Integer status, String startTime, String endTime);


    Double getTotalRecharge(List<Long> userIds);

    /**
     * 获取充值记录
     * @return
     */
    IPage<UserRechargeVO> getRechargeList(Integer page,Integer size, String keyword,Integer status, String startTime, String endTime);

}
